/**
 * 
 */
package com.proyecto.histoclin.modelo.servicios;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.core.Utilidades.UtilConversion;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.histoclin.modelo.dto.CorrelativosHistoclinId;
import com.proyecto.histoclin.modelo.dto.HistoclinDiagnosticos;
import com.proyecto.histoclin.modelo.dto.HistoclinNotasevolucionDiagnostico;

/**
 * @author vico
 *
 */
public class ServicioHistoclinNotasevolucionDiagnostico extends
		ServicioGenerico {

	/**
	 * 
	 */
	ServicioCorrelativosHistoclin servicioCorrelativosHistoclin;
	
	public ServicioHistoclinNotasevolucionDiagnostico() {
		// TODO Auto-generated constructor stub
	}


	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		

		HistoclinNotasevolucionDiagnostico objHistoclinNotasevolucionoDiagnostico = (HistoclinNotasevolucionDiagnostico)pojo;

		if (isValidacionActiva()){
			validacion.incluir(objHistoclinNotasevolucionoDiagnostico);
		}
		
		
		try {
			
			String proxNumero = servicioCorrelativosHistoclin.obtenerProximoNumeroComoString(
					new CorrelativosHistoclinId (objHistoclinNotasevolucionoDiagnostico.getId().getCiaopr(), "HC_NTEVOLDX","notevoluciondiagcod" ) ,true);

			objHistoclinNotasevolucionoDiagnostico.getId().setNotevoluciondiagcod( Integer.parseInt(proxNumero) );

			if(objHistoclinNotasevolucionoDiagnostico.getDiagprin().equals(UtilConversion.VALOR_CIERTO)){
				modificarValorDiagnosticoPrimario(
						objHistoclinNotasevolucionoDiagnostico.getId().getCiaopr(), 
						objHistoclinNotasevolucionoDiagnostico.getId().getHisclicod(), 
						objHistoclinNotasevolucionoDiagnostico.getNropersona(), "N");
			}
	
			super.incluir(objHistoclinNotasevolucionoDiagnostico, iniciaTransaccion);

		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioHistoclinNotasevolucion::: " + e.getMessage());
			if("advertencia.HistoriasClinicas.datosEspecificos.HistoclinNotasevolucion.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
		}
		
	}


	@Override
	public void modificar(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		HistoclinNotasevolucionDiagnostico objHistoclinNotasevolucionDiagnostico = (HistoclinNotasevolucionDiagnostico)pojo;
		if(objHistoclinNotasevolucionDiagnostico.getDiagprin().equals(UtilConversion.VALOR_CIERTO)){
			modificarValorDiagnosticoPrimario(
					objHistoclinNotasevolucionDiagnostico.getId().getCiaopr(), 
					objHistoclinNotasevolucionDiagnostico.getId().getHisclicod(), 
					objHistoclinNotasevolucionDiagnostico.getNropersona(), "N");
		}
		super.modificar(pojo, iniciaTransaccion);
	}


	public void modificarValorDiagnosticoPrimario(String ciaopr, Integer hisclicod, Integer nropersona, String diagprin){
		String query = "";
		Session s = null;
		Session sesion = null;
		Transaction t = null;
		query = "update histoclin_notasevolucion_diagnosticos set diagprin = '" + diagprin +"'" +
				" where ciaopr = '" + ciaopr + "' and " +
					"hisclicod = " + hisclicod + " and " +
					"nropersona = " + nropersona;	

		System.out.println("ServicioHistoclinNotasevolucionDiagnostico.modificarValorDiagnosticoPrimario");
		System.out.println("query: " + query);
		/*
		try {
			ejecutarQueryDMLk(query, null);
			//propiedadDAO.ejecutarConsultaSQL(query, sesion);
		} catch (Exception e) {
			e.printStackTrace();
			System.err.println("e.modificarValorDiagnosticoPrimario-> " + e.getMessage());
		}	
		*/

		try {
			if(s!=null){
				sesion = s;
			}else{
				sesion = propiedadDAO.getSessionFactory().openSession();
				t = sesion.beginTransaction();
			}
			sesion.createSQLQuery(query).executeUpdate();
			
			if(s==null){
				t.commit();
				sesion.close();
				t = null;
				sesion = null;
			}
		} catch (Exception e) {
			e.printStackTrace();
			e.printStackTrace();
			try{
				t.rollback();
			}catch (Exception e1) {
				sesion = null;
				t=null;
			}
		}
		
	}
	
	public ServicioCorrelativosHistoclin getServicioCorrelativosHistoclin() {
		return servicioCorrelativosHistoclin;
	}


	public void setServicioCorrelativosHistoclin(
			ServicioCorrelativosHistoclin servicioCorrelativosHistoclin) {
		this.servicioCorrelativosHistoclin = servicioCorrelativosHistoclin;
	}
}
